home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_004 / banner / banner.c < prev   
C/C++ Source or Header  |  1992-05-06  |  5KB  |  216 lines

  1. /*
  2.  *    improved banner program
  3.  *
  4.  * Taken from a unix sig distribution tape.
  5.  *
  6.  * Modified for vms/decus by Martin Minow.
  7.  */
  8.  
  9.  
  10. #include <stdio.h>
  11.  
  12. #define LINESIZE    256
  13.  
  14. /*
  15.  *    bit pattern character table
  16.  */
  17.  
  18. char btab[][7] =
  19. {
  20.     010,    010,    010,    010,    010,    00,    010,
  21.     024,    024,    024,    00,    00,    00,    00,
  22.     024,    024,    0177,    024,    0177,    024,    024,
  23.     010,    034,    050,    034,    012,    034,    010,
  24.     0161,    0122,    0164,    010,    027,    045,    0107,
  25.     034,    042,    024,    010,    025,    042,    035,
  26.     04,    010,    020,    00,    00,    00,    00,
  27.     01,    02,    04,    04,    04,    02,    01,
  28.     0100,    040,    020,    020,    020,    040,    0100,
  29.     0111,    052,    034,    0177,    034,    052,    0111,
  30.     00,    010,    010,    076,    010,    010,    00,
  31.     00,    00,    00,    00,    00,    040,    0100,
  32.     00,    00,    00,    074,    00,    00,    00,
  33.     00,    00,    00,    00,    00,    00,    040,
  34.     01,    02,    04,    010,    020,    040,    0100,
  35.     034,    042,    0105,    0111,    0121,    042,    034,
  36.     030,    010,    010,    010,    010,    010,    034,
  37.     034,    042,    02,    04,    010,    020,    076,
  38.     034,    042,    02,    04,    02,    042,    034,
  39.     02,    06,    012,    022,    077,    02,    02,
  40.     076,    040,    040,    074,    02,    042,    034,
  41.     02,    04,    010,    036,    041,    041,    036,
  42.     077,    01,    02,    04,    010,    020,    040,
  43.     034,    042,    042,    034,    042,    042,    034,
  44.     036,    041,    041,    036,    04,    010,    020,
  45.     00,    00,    00,    010,    00,    010,    00,
  46.     00,    00,    00,    010,    00,    010,    020,
  47.     02,    04,    010,    020,    010,    04,    02,
  48.     00,    00,    074,    00,    074,    00,    00,
  49.     040,    020,    010,    04,    010,    020,    040,
  50.     034,    042,    02,    04,    010,    00,    010,
  51.     076,    0101,    0117,    0111,    0117,    0100,    076,
  52.     034,    042,    0101,    0177,    0101,    0101,    0101,
  53.     0176,    0101,    0101,    0176,    0101,    0101,    0176,
  54.     034,    042,    0100,    0100,    0100,    042,    034,
  55.     0174,    0102,    0101,    0101,    0101,    0102,    0174,
  56.     0176,    0100,    0100,    0170,    0100,    0100,    0176,
  57.     0176,    0100,    0100,    0170,    0100,    0100,    0100,
  58.     036,    041,    0100,    0100,    0107,    041,    036,
  59.     0101,    0101,    0101,    0177,    0101,    0101,    0101,
  60.     034,    010,    010,    010,    010,    010,    034,
  61.     02,    02,    02,    02,    02,    042,    034,
  62.     0102,    0104,    0110,    0120,    0150,    0104,    0102,
  63.     0100,    0100,    0100,    0100,    0100,    0100,    0176,
  64.     0101,    0143,    0125,    0111,    0101,    0101,    0101,
  65.     0101,    0141,    0121,    0111,    0105,    0103,    0101,
  66.     076,    0101,    0101,    0101,    0101,    0101,    076,
  67.     0176,    0101,    0101,    0176,    0100,    0100,    0100,
  68.     076,    0101,    0101,    0111,    0105,    0102,    075,
  69.     0176,    0101,    0101,    0176,    0104,    0102,    0101,
  70.     076,    0101,    0100,    076,    01,    0101,    076,
  71.     0177,    010,    010,    010,    010,    010,    010,
  72.     0101,    0101,    0101,    0101,    0101,    0101,    076,
  73.     0101,    0101,    0101,    0101,    042,    024,    010,
  74.     0101,    0101,    0101,    0111,    0125,    0143,    0101,
  75.     0101,    042,    024,    010,    024,    042,    0101,
  76.     0101,    042,    024,    010,    010,    010,    010,
  77.     0177,    02,    04,    010,    020,    040,    0177,
  78.     07,    04,    04,    04,    04,    04,    07,
  79.     0100,    040,    020,    010,    04,    02,    01,
  80.     0160,    020,    020,    020,    020,    020,    0160,
  81.     010,    024,    042,    0101,    00,    00,    00,
  82.     00,    00,    00,    00,    00,    00,    0177,
  83.     020,    010,    04,    00,    00,    00,    00,
  84.     00,    076,    02,    076,    042,    077,    00,
  85.     040,    040,    074,    042,    042,    0174,    00,
  86.     00,    036,    040,    040,    040,    036,    00,
  87.     02,    02,    036,    042,    042,    037,    00,
  88.     00,    036,    041,    077,    040,    036,    00,
  89.     010,    024,    020,    070,    020,    020,    00,
  90.     00,    034,    042,    042,    036,    02,    014,
  91.     040,    040,    076,    041,    041,    041,    00,
  92.     010,    00,    010,    010,    010,    034,    00,
  93.     02,    00,    02,    02,    02,    022,    014,
  94.     040,    044,    050,    060,    050,    044,    00,
  95.     030,    010,    010,    010,    010,    034,    00,
  96.     00,    0166,    0111,    0111,    0111,    0111,    00,
  97.     00,    076,    041,    041,    041,    041,    00,
  98.     00,    036,    041,    041,    041,    036,    00,
  99.     00,    074,    042,    042,    074,    040,    040,
  100.     00,    036,    042,    042,    036,    02,    03,
  101.     00,    054,    042,    040,    040,    040,    00,
  102.     00,    036,    040,    036,    01,    036,    00,
  103.     020,    074,    020,    020,    022,    014,    00,
  104.     00,    041,    041,    041,    041,    035,    00,
  105.     00,    042,    042,    024,    024,    010,    00,
  106.     00,    0101,    0101,    0111,    0111,    066,    00,
  107.     00,    042,    024,    010,    024,    042,    00,
  108.     00,    042,    042,    042,    036,    02,    014,
  109.     00,    076,    04,    010,    020,    076,    00,
  110.     03,    04,    04,    030,    04,    04,    03,
  111.     010,    010,    010,    010,    010,    010,    010,
  112.     0140,    020,    020,    014,    020,    020,    0140,
  113.     060,    0111,    06,    00,    00,    00,    00,
  114.     0177,    0177,    0177,    0177,    0177,    0177,    0177
  115. };
  116.  
  117. /*
  118.  * subroutine to make the characters for a banner
  119.  */
  120.  
  121. char *
  122. mkline(s,prch,line,space)
  123. char *s, prch, *space;
  124. int line;
  125. {
  126.     register char *rs, *rl;
  127.     register int bit;
  128.     int i, j, m;
  129.     rl = space;
  130.     for (i = 0; i < 7; i++)
  131.     {
  132.         j = 0;
  133.         for (rs = s; *rs && j < line; j++)
  134.         {
  135.             bit = (bit=(*rs++&0177)-'!') < 0 ? 0 : btab[bit][i];
  136.             for (m = 0100; bit; m >>= 1)
  137.             {
  138.                 *rl++ = m&bit ? (prch ? prch : rs[-1]) : ' ';
  139.                 bit &= ~m;
  140.             }
  141.             *rl++ = '\t';
  142.         }
  143.         while (*--rl == '\t');
  144.         ++rl;
  145.         *rl++ = '\n';
  146.     }
  147.     *rl = '\0';
  148.     return(space);
  149. }
  150.  
  151. main(argc,argv)
  152. int argc;
  153. char **argv;
  154. {
  155.     register char prch, *space;
  156.     static char buf[LINESIZE];
  157.     register int line;
  158.     extern char *malloc();
  159.     prch = '*';
  160.     line = 10;
  161.     while (argc > 1 && **++argv == '-')
  162.     {
  163.         --argc;
  164.         switch(*++*argv | 040)
  165.         {
  166.         case 'c':        /* char to use            */
  167.             prch = *++*argv;
  168.             break;
  169.         case 'l':        /* line width            */
  170.         case 'w':
  171.             line = atoi(++*argv)>>3;
  172.             break;
  173.         }
  174.     }
  175.     space = malloc(line*64);
  176.     putchar('\n');
  177.     if (--argc > 0) {
  178.         do
  179.         {
  180.             printf("\n%s",mkline(*argv++,prch,line,space));
  181.             fflush(stdout);
  182.         } while (--argc);
  183.     }
  184.     else
  185.         while (getline(buf))
  186.         {
  187.             printf("\n%s",mkline(buf,prch,line,space));
  188.              fflush(stdout);
  189.         }
  190. }
  191.  
  192. /*
  193.  *    read in a line from the standard input
  194.  */
  195.  
  196. getline(p)
  197. char *p;
  198. {
  199. #ifndef vms
  200.     register char *q;
  201.     q = p;
  202.     while ((*q = getchar()) != EOF) {
  203.         if (*q++ == '\n') {
  204.             break;
  205.         }
  206.     }
  207.     if (*q == EOF) {
  208.         return(0);
  209.     }
  210.     *++q = '\0';
  211.     return (q-p);
  212. #else
  213.     return(fgetss(p, LINESIZE, stdin) != NULL);
  214. #endif
  215. }
  216.